1.shell脚本是什么
它是一种脚本语言,并非编程语言
可以使用一些逻辑判断、循环等语法
可以自定义子函数
是系统命令的集合
shell脚本可以实现自动化运维,大大增加我们的工作效率
2.shell脚本结构以及执行方法
开头行指定bash路径: #! /bin/bash
以#开头的行作为解释说明
脚本的名字以.sh结尾,用于区分这是一个shell脚本
执行方式有两种:chmod +x 1.sh; ./1.sh 如果没有执行权限可以 bash 1.sh
bash -x 1.sh 可以查看脚本执行过程
3.学会date命令的用法
- date +%Y-%m-%d, date +%y-%m-%d 年月日
- date +%H:%M:%S = date +%T 时间
- date +%s 时间戳
- date -d @1434248742
- date -d “+1day”一天后date -d “-1day”一天前
- date -d “-1month” 一月前
- date -d “-1min” 一分钟前
- date +%w, date +%W 星期
4.shell脚本中的变量
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
使用条件语句时,常常使用变量 if [ $a -gt 1 ]; then … ; fi
引用某个命令的结果时,用变量替代 n=wc -l 1.txt
写和用户交互的脚本时,变量也是必不可少的 read -p “Input a number: “ n; echo $n 如果没写这个n,可以直接使用$REPLY
内置变量 $0, $1, $2… $0表示脚本本身,$1 第一个参数,$2 第二个 …. $#表示参数个数
数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]
5.shell中的逻辑判断
格式1:
|
|
格式2:
|
|
格式3:
|
|
逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格
可以使用 && || 结合多个条件
6.if 判断文件、目录属性
- [ -f file ]判断是否是普通文件,且存在
- [ -d file ] 判断是否是目录,且存在
- [ -e file ] 判断文件或目录是否存在
- [ -r file ] 判断文件是否可读
- [ -w file ] 判断文件是否可写
- [ -x file ] 判断文件是否可执行
- [ -s file ] 判断文件大小是否非0
- [ -c file ] 判断文件是否为字符特殊文件,且存在
- [ -b file ] 判断文件是否为块特殊文件,且存在
- [ -t file ] 判断文件是否为描述符(默认为1)指定的设备为终端
- [ -L file ] 判断制定的是否为符号链接
- [ “$a” = “$b” ] 判断 $a 和 $b 是否相等
- [ -n “$var” ] 判断 $var 变量是否有值
- [ -z ] 判断变量是否存在值
- [! ] 测试条件的否定符号
|
|
7.if 判断一些特殊用法
- if [ -z $a ] 这个表示当变量a的值为空时会怎么样
- if grep -q ‘123’ 1.txt; then 表示如果1.txt中含有’123’的行时会怎么样
- if [ ! -e file ]; then 表示文件不存在时会怎么样
- if (($a<1)); 1="" then="" …等同于="" if="" [="" $a="" -lt="" ];="" then…="" ]="" 中不能使用<,="">,==,!=,>=,<=这样的符号1));>
8.shell中的case判断
格式:
|
|
在case程序中,可以在条件中使用|,表示或的意思, 比如
|
|
当变量为2或者3时,执行该部分命令。
案例:
|
|
9.shell脚本中的循环
for循环语法结构:
|
|
案例1:
|
|
案例2:
|
|
案例3:
|
|
while 循环语法结构:
|
|
案例1:
|
|
案例2:
|
|
break直接结束本层循环;
|
|
continue忽略continue之下的代码,直接进行下一次循环
|
|
exit 直接退出shell
|
|
10.shell中的函数
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
格式:
|
|
函数必须要放在最前面
案例1:
|
|
案例2:
|
|
案例3:
|
|
函数里可以export 全局变量
11.shell练习题
编写shell脚本,计算1-100的和;
|
|
编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;
|
|
|
|
编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;
|
|
编写shell脚本,批量建立用户user_00, user_01, … user_100并且所有用户同属于users组;
|
|
编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;
|
|